package com.longrise.android.byjk.plugins.course.coursedetail.courseadapter;

import com.longrise.android.byjk.model.CourseTrainDirBean;
import com.longrise.android.byjk.plugins.dealsituation.course.video2.params.ToDispatchStudy;
import com.longrise.android.byjk.plugins.dealsituation.course.video2.params.VideoParams;
import com.longrise.common.utils.PrintLog;

import java.util.List;

/**
 * Created by godliness on 2017/8/30.
 * 辅助CourseDetailAdapter完成相关操作
 */

public final class AssistAdapter {

    private static final String TAG = "AssistAdapter";

    /**
     * @param dirinfos 课程数据结构
     * @param cwid     课件id
     *                 根据cwid找到在课程数据结构中索引位置
     *                 如果配置人员一个课件多次配置在同一个课程中，始终只能获取到第一次出现的位置
     */
    public static int[] assistGetCwidInAdapterIndex(List<CourseTrainDirBean.Dirinfo> dirinfos, String cwid) {
        int group = 0;
        int child;

        for (CourseTrainDirBean.Dirinfo dirinfo : dirinfos) {
            group++;
            child = 0;
            if (dirinfo == null || dirinfo.nextnodeinfo == null) {
                continue;
            }

            for (CourseTrainDirBean.Nextnodeinfo nextnodeinfo : dirinfo.nextnodeinfo) {
                child++;
                if (cwid.equals(nextnodeinfo.cwid)) {
                    group--;
                    child--;
                    return new int[]{group, child};
                }
            }
        }
        return null;
    }

    /**
     * @param nextnodeinfo 课件信息
     * @param position     课件在课程数据结构队列中的位置
     *                     播放器所需要的参数
     */
    public static VideoParams assistGenerateVideoParams(CourseTrainDirBean.Nextnodeinfo nextnodeinfo, int[] position) {
        VideoParams videoParams = new VideoParams();
        videoParams.mCwidName = nextnodeinfo.name;
        videoParams.mCwid = nextnodeinfo.cwid;
        videoParams.mPathNo = nextnodeinfo.pathno;
        videoParams.mCwidStyle = nextnodeinfo.cwstyle;
        videoParams.mDataNet = false;
        videoParams.mHasqa = nextnodeinfo.hasqa;
        videoParams.mFinish = nextnodeinfo.isfinish;
        videoParams.mVideopass = nextnodeinfo.videopass;
        videoParams.mCwidLocal = position;

        //以下为兼容模拟测试题
        if (ToDispatchStudy.TEST.equals(nextnodeinfo.cwstyle)) {
            videoParams.istest = nextnodeinfo.istest;
            videoParams.recordid = nextnodeinfo.recordid;
        }
        return videoParams;
    }

    /**
     * @param dirinfos 课程数据结构队列
     *                 找到第一个未通过的课件，如果全部通过默认为第一个
     *                 如果课程配置异常，则默认返回null，不做任何处理
     */
    public static VideoParams assistStartNoFinishCwid(List<CourseTrainDirBean.Dirinfo> dirinfos) {
        int[] index = {0, 0};
        CourseTrainDirBean.Nextnodeinfo nextnodeinfo = assistGetFirstNopassCwid(dirinfos, index);
        //如果是全部通过，则返回第一个
        if (nextnodeinfo == null) {
            CourseTrainDirBean.Dirinfo dirinfo = dirinfos.get(0);
            if (dirinfo == null || dirinfo.nextnodeinfo == null) {
                return null;
            }
            nextnodeinfo = dirinfo.nextnodeinfo.get(0);
            index[0] = 0;
            index[1] = 0;
        }
        return assistGenerateVideoParams(nextnodeinfo, index);
    }

    /**
     * @param dirinfos 课程数据结构队列
     * @param index    课件在课程数据结构队列中的位置
     *                 找到第一个未通过的课件
     */
    public static CourseTrainDirBean.Nextnodeinfo assistGetFirstNopassCwid(List<CourseTrainDirBean.Dirinfo> dirinfos, int[] index) {
        for (CourseTrainDirBean.Dirinfo dirinfo : dirinfos) {
            index[0]++;
            index[1] = 0;
            if (dirinfo == null || dirinfo.nextnodeinfo == null) {
                continue;
            }
            for (CourseTrainDirBean.Nextnodeinfo nextnodeinfo : dirinfo.nextnodeinfo) {
                index[1]++;
                if (!nextnodeinfo.isfinish) {
                    index[0]--;
                    index[1]--;
                    return nextnodeinfo;
                }
            }
        }
        return null;
    }

    /**
     * @param dirinfos 课程数据结构队列
     * @param position 课件位置
     *                 根据课件位置更新课程数据结构队列中对应课件的状态
     */
    public static boolean assistUpdateCwidState(List<CourseTrainDirBean.Dirinfo> dirinfos, int[] position) {
        int group = position[0];
        int child = position[1];
        int size = dirinfos.size();
        if (group > size - 1) {
            //越界
            PrintLog.e(TAG, "0");
            return false;
        }
        CourseTrainDirBean.Dirinfo dirinfo = dirinfos.get(group);
        if (dirinfo == null) {
            PrintLog.e(TAG, "1");
            return false;
        }
        List<CourseTrainDirBean.Nextnodeinfo> nextnodeinfos = dirinfo.nextnodeinfo;
        if (nextnodeinfos == null) {
            PrintLog.e(TAG, "2");
            return false;
        }
        int childSize = nextnodeinfos.size();
        if (child > childSize - 1) {
            //越界
            PrintLog.e(TAG, "3");
            return false;
        }
        CourseTrainDirBean.Nextnodeinfo nextnodeinfo = nextnodeinfos.get(child);
        if (nextnodeinfo != null) {
            if (nextnodeinfo.isfinish) {
                PrintLog.e(TAG, "4");
                return false;
            }
            if (nextnodeinfo.hasqa) {
                nextnodeinfo.videopass = true;
            } else {
                nextnodeinfo.videopass = true;
                nextnodeinfo.isfinish = true;
                dirinfo.finishedcwcount++;
            }
            //状态更新成功
            return true;
        }
        PrintLog.e(TAG, "5");
        return false;
    }

    /**
     * @param dirinfos 课程数据结构队列
     * @param position 课件位置
     * @see
     */
    public static boolean assistUpdateCacheCwidState(List<CourseTrainDirBean.Dirinfo> dirinfos, int[] position) {
        return assistUpdateCwidState(dirinfos, position);
    }
}
